package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

/**
 * 2.5循环
 * 1.for
 * (1) for的条件里不需要括号
 * (2) for的条件里省略初始条件，结束条件，递增表达式
 * (3) 省略初始条件(递增条件都省略)，相当于while
 * (4) 什么都省略，死循环(无限循环)
 *
 *
 * 基本语法要点回顾
 * (1) for, if后面的条件没有括号
 * (2) if条件里也可定义变量
 * (3) 没有while
 * (4) switch不需要break,也可以直接switch多个条件
 */
func main() {
	fmt.Println(
		convertToBin(5),  // 101
		convertToBin(13), // 1101
		convertToBin(72387885),
		convertToBin(0),
	)
	printFile("abc.txt")
	forever()
}

// 1.for 整数转为二进制 省略起始条件
func convertToBin(n int) string {
	result := ""
	for ; n > 0; n /= 2 {
		lsb := n % 2
		result = strconv.Itoa(lsb) + result
	}
	return result
}

// 2.一行一行读文件  省略起始条件，递增条件
func printFile(filename string) {
	file, err := os.Open(filename)
	if err != nil {
		panic(err)
	}

	scanner := bufio.NewScanner(file)

	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}
}

// 3.省略结束条件
func forever() {
	for {
		fmt.Println("abc")
	}
}
